#pragma once
#include <thread>
#include <string>
#include <sstream>

/**
 * 定义当前线程的id和name,用于区分不同的线程
 */
namespace CurrentThread
{
    /*
    note:每个线程缓存自己id的方法,通过每个线程缓存自己的tid,从而不需要每次进行系统调用获取tid
        定义在.h的全局变量,需要使用extern定义,同时需要在.cpp文件中定义
    */
    extern thread_local std::thread::id cachedTid;
    extern thread_local std::string cachedName;
    void cacheTid();

    inline std::thread::id tid()
    {
        if(cachedTid == static_cast<std::thread::id>(0)){
            cacheTid();    
        }
        return cachedTid;
    }

    inline std::string tname(){
        return cachedName;
    }

}